

namespace gen {
 
    template <typename S>
    template <typename InfoT>
	void
	kleene_star<S>::generate(InfoT & info) const
    {
        for (typename InfoT::iterator_t i = info.first();
			 i!=info.last();
			 ++i)
        {
			InfoT nwInfo(i,info.last());
            this->subject().generate(nwInfo);
			info.append(nwInfo.str());
        }

    }
    
    ///////////////////////////////////////////////////////////////////////////
    //
    //  kleene_star class implementation
    //
    ///////////////////////////////////////////////////////////////////////////
    template <typename S>
    inline kleene_star<S>
    operator*(generator<S> const& a)
    {
        return kleene_star<S>(a.derived());
    }

}
